<?php
class LoteBSN extends GenericBSN {

	function __construct() {
		$this->dao = new LoteDAO();		
	}

	public function consultar($vars) {
		$this->preencher($vars);
		$this->Records = $this->dao->consultar($this->where, $this->params, $this->order . $this->limit);
		$this->Result  = "OK";
	}
	
	public function consultarPK($vars) {
		$this->Records = $this->dao->consultarPK($vars['id']);
		$this->Result = "OK";
	}
	
	public function consultarQuadra($vars) { 
		$where = 'where q_id = :q_id and codigo like :codigo';
		$params['q_id'] = $vars['q_id'];
		$params['codigo'] = $vars['codigo'] . '%';
		$this->Records = $this->dao->consultar($where, $params);
		$this->Result = "OK";
	}
	
	public function inserir($vars) {
		$registro['quadra']		= $vars['q_id'];
		$registro['rua']		= $vars['rua_id'];
		$registro['numero']		= $vars['numero'];
		$registro['coluna']		= $vars['coluna'];
		$registro['codigo']		= $vars['sq_codigo'] . $vars['q_codigo'] . $vars['rua_nome'] . $vars['numero'];
		$registro['construido']	= $vars['construido'];
		
		try {
			$this->Record = $this->dao->inserir($registro);
			$this->Result  = "OK";
		} catch (Exception $e) {
			$this->Result  = "ERROR";
			$this->Message = "Erro ao tentar alterar: " . $e->getMessage();
		}
	}
	
	public function alterar($vars) {
		$registro['id'] 	 	= $vars['id'];
		$registro['rua']		= $vars['rua_id'];
		$registro['numero']		= $vars['numero'];
		$registro['coluna']		= $vars['coluna'];
		$registro['codigo']		= $vars['sq_codigo'] . $vars['q_codigo'] . $vars['rua_nome'] . $vars['numero'];
		$registro['construido']	= $vars['construido'];
		$this->Record = $registro;
		
		try {
			$lote = $this->dao->consultarPK($vars['id']);
			if ($lote[0]['construido'] != $registro['construido']) {
				$mapaDAO = new MapaDAO();
				$mapa = $mapaDAO->consultarQuadra($vars['q_id']);
				$novoMapa['id'] = $mapa[0]['id'];
				$novoMapa['construidos'] = ($lote[0]['construido'] == 'N') ? $mapa[0]['construidos'] + 1 : $mapa[0]['construidos'] - 1;
				$novoMapa['avenda'] = ($lote[0]['construido'] == 'N') ? $mapa[0]['avenda'] + 1 : $mapa[0]['avenda'] - 1;
				$mapaDAO->alterar($novoMapa, false);
			}
			$this->dao->alterar($registro);
			$this->Result  = "OK";
		} catch (Exception $e) {
			$this->Result  = "ERROR";
			$this->Message = "Erro ao tentar alterar: " . $e->getMessage();
		}
	}
	
	public function excluir($registro) {
		$mapaDAO = new MapaDAO();
		try {
			$lote = $this->dao->consultarPK($registro['id']);
			$mapa = $mapaDAO->consultarQuadra($lote[0]['q_id']);
			
			$novoMapa['id'] = $mapa[0]['id'];
			$novoMapa['lotes'] = $mapa[0]['lotes'] - 1;
			$novoMapa['construidos'] = ($lote[0]['construido'] == 'S') ? $mapa[0]['construidos'] - 1 : $mapa[0]['construidos']; 
			$novoMapa['avenda'] = ($lote[0]['construido'] == 'S') ? $mapa[0]['avenda'] - 1 : $mapa[0]['avenda'];
			$mapaDAO->alterar($novoMapa, false);
			
			$res = $this->dao->excluir($registro['id']);
			$this->Result  = "OK";
		} catch (Exception $e) {
			$this->Result  = "ERROR";
			$this->Message = "Erro ao tentar excluir: " . $e->getMessage();
		}
	}
	
	public function relatorio($vars) {
		try{
			$this->Records = $this->dao->consultarRelatorio($vars['tipo'], $vars['sq_codigo'], $vars['q_codigo']);
			$this->Result = "OK";
		} catch (Exception $e) {
			$this->Result  = "ERROR";
			$this->Message = "Erro ao tentar gerar relatório: " . $e->getMessage();
		}
	}
	
	public function importar($vars) {
		$quadraDAO 	= new QuadraDAO();
		$ruaDAO		= new RuaDAO();
		
		try {
			$fonte 	= file($vars['arquivo']);
			
			foreach($fonte as $num => $linha) {
				$reg 	= explode(",", $linha);
				$quadra = $quadraDAO->consultarSQQ($reg[0], $reg[1]);
				
				if (!isset($quadra[0])) {
					throw new Exception('Quadra não localizada: ' . $reg[0] . " - " . $reg[1]);
				}
				
				$rua 	= $ruaDAO->consultarRuaSQ($reg[2], $reg[0]);
				
				if (!isset($rua[0])) {
					throw new Exception('Rua não localizada: ' . $reg[2] . " - " . $reg[0]);
				}
				
				$numero = explode(".", $reg[3]);
				
				$lote['quadra']		= $quadra[0]['id'];
				$lote['rua']		= $rua[0]['id'];
				$lote['numero']		= $numero[0];
				$lote['coluna']		= $reg[4];
				$lote['codigo']		= $reg[5];
				$lote['construido']	= 'S';
				
				$reg = $this->dao->inserir($lote, false);

				if (!isset($reg['id'])) {
					throw new Exception('Erro no cadastro do lote: ' . var_dump($lote));
				}
				echo "Registro $num importado!<br>";
			}
			$this->dao->commit();
			echo ($vars['arquivo'] . "Importado com SUCESSO!!!");
		} catch (Exception $e) {
			$this->dao->rollback();
			die($e->getMessage());
		}
	}
}
?>